做個精明消費者 : Python 簡單數據科學日常應用例子
2019-03-27
前言
相信讀者或多或少都會有需要去香港超級市場購買家居日常用品的經驗.而從小我們都知道貨比三家,格價理財的基本消費原則. 不知道讀者會否知道香港有消費者委員會, 在消費者委員會的網上推出了網上格價一覽通, 讓我們每日得到六間超級市場的相同貨品的價格資料.
如何透過Python數據科學協助你精明消費?
數據科學比較通俗的看法是把數據和程式當成項目來管理. 在一個項目中,我們會希望可以使用數據及演算法為我們得出有意義的知識, 從而在有限的資源條件下做出相對明智的決策.
我們可以參考坊間一些機構提出的數據科學工作流程來建立我們的數據科學項目管理,當中流程如下:
- 設定數據項目目標
- 收集相關有用數據
- 對數據進行整理
- 使用演算法和模型分析數據
- 分享分析結果
- 盡量把工作流程自動化
因應數據項目的需求大小, 我們可能會選擇把項目做大一些或者做細一些. 因應這十幾年世界經濟正處於相對上世紀來說比較急速散亂的發展, 市場上出現了有如精益創業等提出如何在低風險下做出成功的產品, 故我們可以參考精益創業的方向, 把我們每一個數據科學項目先從低成本中建立, 當急速轉變的市場出現需求時就試試把該項目擴大成為市場受歡迎的項目. 好! 我們現在就把數據科學項目管理的工作流程應用在如何成為精明超級市場清費者.
步驟1: 設定數據項目目標
我們希望能找出同一件貨品在哪一間超市購買比較經濟
如上圖, 我們知道如果只是購買 ”嘉頓 Garden超軟蛋糕 - 雲呢拿味 8片”, 百佳應該是次選
步驟2: 收集相關有用數據
在這裡我們可以應用網路爬蟲的程式來自動化我們的工作
如果可以把網上的數據放入可以做分析的環境例如Python 或者 Excel 的話, 我們就可以進行數據模型了
透過 Python 我們可以寫以下33行編碼, 然後在 Python IDE (例如 Visual Studio Code, Thonny, Jupyter Notebook) 中運行, 就可以把資料放到 df 中和supermarket.csv 中了
當然, 能夠完全明白這33行編碼需要時間去多認識 Python libraries 及當中的原理. 然後我們就可以自制化當中的細節
#%% import requests import lxml.html as lh import pandas as pd url = 'http://www3.consumer.org.hk/pricewatch/supermarket/' page = requests.get(url) doc = lh.fromstring(page.content) tr_elements = doc.xpath('//tr') tr_elements = tr_elements[18:] col = [] i = 0 for t in tr_elements[1]: i += 1 name = t.text_content() col.append((name, [])) for j in range(1, len(tr_elements)): T = tr_elements[j] if len(T) != 11: break i = 0 for t in T.iterchildren(): data = t.text_content() if i > 0: try: data = int(data) except: pass col[i][1].append(data) i += 1 Dict = {title: column for (title, column) in col} df = pd.DataFrame(Dict) columnsTitles = [ "最後更新日期", "分類", "牌子", "貨品(可按入瀏覽詳情)", "惠康", "MarketPlace", "百佳", "屈臣氏", "大昌食品", "AEON", "選擇" ] new_df = df.reindex(columns=columnsTitles) new_df.to_csv("supermarket.csv", encoding="utf-8-sig")
步驟3: 數據整理
數據在分析環境中會有不同的存留形式, 很多時候就是需要做好數據整理才能把數據放入演算法及數學模型中. 以下是我們把惠康的文字價格轉為數值價格的編碼
new_col = [] for i in range(len(l)): temp = l[i] if len(temp) > 8: temp = temp.replace('\xa0$ ', '') else: temp = temp.replace('$ ', '') if temp == '--': temp = 0 temp = float(temp) new_col.append(temp) df['new_welcome'] = new_col df.head()
步驟4: 數據分析
如何可以找出所有會出現價格不一樣的貨品呢? 就是平均值跟每一間超市的價格有差異! 如圖, 我們見到第二行就出現了平均值有差異的情況, 也代表可有更加經濟的選購目標了
步驟5: 分享分析結果
分享分析結果是為了讓其他的項目關注者了解分析結果是否合理, 應如何作出合適的修正. 我們現在初步的分析是不完整的,而完整的分析有待重整了.
步驟6: 盡量把工作流程自動化
我們最後的產品是可以回答我們設定的目標, 在這個項目中,我們可能需要的是一個每日都更新的Excel表, 而這個表格會出現有較為經濟的貨品. 經過以下的簡單編碼, 我們可以把Excel 表做出來
留言
閱讀更多
如何成為 Programmer (四):適合新手的語言
2018-11-14
初學者剛接觸 Programming 時,經常都遇到一個難題「應該學哪一種程式語言?」這個問題,在十個網站,都會有十個不同的答案,而且不同年代也有不同的答案!
Data Science? AI ? Machine Learning? 到底有何分別?
2018-11-23
近幾年大家經常聽到 Data Science(數據科學)、AI(人工智能)、Machine Learning(機器學習)、 Deep Learning(深度學習)等等詞彙, 以上的名詞的意思好像差不多,但又並非完全一樣
有一種病叫Excel病
2018-12-14
有一種有相當歷史的軟件,簡單易學,能滿足大多數人對電腦運算能力、資料處理的需要,除了最初設計用途,被濫用在很多不同用途上, 聰明如你,應該知道我想講的就是試算表(Spreadsheet),其中最多人用的當然就是Microsoft Excel。
HTTP:互聯網的共同語言
2019-02-25
互聯網的共同**人類**語言是甚麼呢?答案是英文,根據[維基百科](https://en.wikipedia.org/wiki/Languages_used_on_the_Internet),世界上有五成四的網站都是以英文寫成,另外的四成六則以其他世界各地的語言寫成,所以說互聯網上的用家(即是各位)主要使用英文溝通也不為過。可是大家細想一下,互聯網上的電腦,又是怎樣互相溝通的呢?當你鍵入 `https://www.google.com`,為何遠在千里之外的Google伺服器,能夠與你桌上的手提電腦裏的Google Chrome溝通呢?這一切,要由互聯網誕生之初講起。